#include<bits/stdc++.h> 
using namespace std;
// 	评判一个学生的表现从CMEA四个方面来考察，分别表示C程序、数学、英语以及平均
//  分。我们鼓励学生关注自己的最好成绩，所以需要打印输出每一个学生自己排名最好
//  的最好成绩 
//1.每个输入具有一个测试用例，测试用例由三部分组成，第一行是两个数字N和M，都
//  ≤2000，N表示学生的个数，M表示需要查成绩的人的个数。
//2.接下来N行每一行都包含了一个学生的ID与三个成绩。ID由6位数码组成，而每个成绩
//  都是0到100的正整数
//3.接下来M行每一行都包含了一个需要查询的ID 
//4.对于每一个测试用例，输出每一个学生自己最好的学科以及全班内部的相对排名。科
//	目重要性为A>C>M>E。如果找不到这个ID，则输出N/A 
//5.struct，sort，map 
struct Student{
	string ID;//	学生ID 
	int A, C, M, E;//	学生的四个成绩 
	int rank_a, rank_c, rank_m, rank_e;//	学生的四个排名 
	string Best;//	存储学生最优秀的内容 
	Student(){
		ID = "";
		A = C = M = E = -1;
		rank_a = rank_c = rank_m = rank_e = 2000;
		Best = "N/A";
	}//	无参构造函数 
	Student(string id, int c, int m, int e){
		ID = id;
		C = c;
		M = m;
		E = e;
		A = (C+M+E);
		Best = "N/A";
	}//	初始化构造函数 
	string Rank(){
		if(rank_a<=rank_c&&rank_a<=rank_e&&rank_a<=rank_m)
		{
			char ss[10];
			sprintf(ss,"%d",rank_a);
			Best = ss;
			Best += " A";
		 }
		else if(rank_c<=rank_m&&rank_c<=rank_e)
		{
			char ss[10];
			sprintf(ss,"%d",rank_c);
			Best = ss;
			Best += " C";
		 }
		else if(rank_m<=rank_e)
		{
			char ss[10];
			sprintf(ss,"%d",rank_m);
			Best = ss;
			Best += " M";
		 }
		else
		{
			char ss[10];
			sprintf(ss,"%d",rank_e);
			Best = ss;
			Best += " E";
		 }
		return Best;
	}//	根据赋值的四个排名来进行最优的处理，ACME的优先级排序 
}; //	定义一个结构体用来存储学生的信息 
map<string, int> map_;//	定义一个Map来存储ID以及该ID在学生数组的坐标 
bool cmpa(Student x, Student y){
	return x.A>y.A;
}//	定义以A为关键字的排序策略，下面同理 
bool cmpc(Student x, Student y){
	return x.C>y.C;
}
bool cmpm(Student x, Student y){
	return x.M>y.M;
}
bool cmpe(Student x, Student y){
	return x.E>y.E;
}
int main(){
	int N,M;
	cin>>N>>M;
	Student stus[N];//	声明构造N个学生的学生数组 
	for(int i = 0;i<N;i++){
		string id;
		int c,m,e;
		cin>>id>>c>>m>>e;
		stus[i] = Student(id, c, m, e);//	传参初始化 
		map_[id] = i;//	映射坐标与ID的关系 
	}
	sort(stus,stus+N,cmpa);//	对A进行排序，并赋值rank_a，下面同理 
	stus[0].rank_a = 1;
	for(int i = 1;i<N;i++){
		if(stus[i].A==stus[i-1].A) stus[i].rank_a = stus[i-1].rank_a;
		else stus[i].rank_a = i+1;
	}
	sort(stus,stus+N,cmpc);
	stus[0].rank_c = 1;
	for(int i = 1;i<N;i++){
		if(stus[i].C==stus[i-1].C) stus[i].rank_c = stus[i-1].rank_c;
		else stus[i].rank_c = i+1;
	}
	sort(stus,stus+N,cmpm);
	stus[0].rank_m = 1;
	for(int i = 1;i<N;i++){
		if(stus[i].M==stus[i-1].M) stus[i].rank_m = stus[i-1].rank_m;
		else stus[i].rank_m = i+1;
	}
	sort(stus,stus+N,cmpe);
	stus[0].rank_e = 1;
	map_[stus[0].ID] = 0;//	对当前的映射关系进行更新 
	for(int i = 1;i<N;i++){
		if(stus[i].E==stus[i-1].E) stus[i].rank_e = stus[i-1].rank_e;
		else stus[i].rank_e = i+1;
		map_[stus[i].ID] = i;
	}
	for(int i = 0;i<M;i++){
		string t;
		cin>>t;	
		if(map_.find(t)!=map_.end())cout<<stus[map_[t]].Rank()<<endl;//	如果查得到这个ID，则通过Rank函数返回最优内容 
		else cout<<"N/A"<<endl;//	否则输出N/A 
	}
} 